class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show(self):
        print(f'大家好，我叫{self.name}，我今年{self.age}岁')


class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    def show(self):
        print(f'大家好，我叫{self.name}，我叫{self.age}，今年考了{self.score}分')


if __name__ == '__main__':
    # Person() 创建对象的时候会自动调用__init__方法()
    # __new__() 由系统调用，由于创建对象。自动调用，先执行：一
    # __int__() 创建对象时手动调用，用于初始化对象属性值。自动调用，再执行：二
    # __str__() 对象的描述，返回值是str类型，默认输出对象的内存地址。主动调用：三
    person = Person('马迪迪', 24)
    student = Student('小刘', 28, 89.9)
    person.show()
    print(dir(object))
    print(dir(person))
    print(person)  # 自动调用了__str__() 方法
    print('*' * 30, '分割线', '*' * 30)
    student.show()
    print(dir(object))
    print(dir(student))
    print(student)  # 自动调用了__str__() 方法
